Address CR comments. 
diff --git a/media-source/import_tests-template.txt b/media-source/import_tests-template.txt deleted file mode 100644 index c3e9bcc..0000000 --- a/media-source/import_tests-template.txt +++ /dev/null 
@@ -1,93 +0,0 @@ -<!doctype html> -<html> - <head> - <link rel='stylesheet' href='../resources/testharness.css'> - <script> - (function() { - var testURLs = []; - var testIndex = 0; - var testCount = 0; - var STATUS_STRINGS = ["PASS", "FAIL", "TIMEOUT", "NOTRUN"]; - - function onMessage(e) - { - var testData = e.data; - - //console.log(testData.type, testData); - - if (testData.type == "complete") { - var tableBody = document.querySelector("#results tbody"); - var fragment = document.createDocumentFragment(); - - testCount += testData.tests.length; -  - for (var i = 0; i < testData.tests.length; ++i) { - var testResults = testData.tests[i]; - var tr = document.createElement("tr"); - var status = document.createElement("td"); - var testName = document.createElement("td"); - var message = document.createElement("td"); - - status.textContent = STATUS_STRINGS[testResults.status]; - tr.className = STATUS_STRINGS[testResults.status].toLowerCase(); - - testName.textContent = testResults.name; - message.textContent = testResults.message; - - tr.appendChild(status); - tr.appendChild(testName); - tr.appendChild(message); - fragment.appendChild(tr); - } - - testIndex++; - if (testIndex >= testURLs.length) { - return; - } - - tableBody.appendChild(fragment); - startNextTest(); - return; - } - } - - function startNextTest() - { - var iframe = document.querySelector("iframe"); - var testURL = testURLs[testIndex]; - - var tr = document.createElement("tr"); - var td = document.createElement("td"); - td.appendChild(document.createTextNode("Running tests in '" + testURL + "' :")); - td.colSpan = 3; - tr.appendChild(td); - document.querySelector("#results tbody").appendChild(tr); - - iframe.src = testURL; - } - - window["onBodyLoad"] = function() - { - window.addEventListener("message", onMessage); - var xhr = new XMLHttpRequest(); - xhr.open("GET", "manifest.txt", false); - xhr.send(); - - var str = xhr.response.replace("\r", ""); - testURLs = xhr.response.replace("\r", "").split("\n"); - startNextTest(); - } - -  - })(window); - </script> - </head> - <body onload="onBodyLoad()"> - <iframe></iframe> - <table id="results" style="float:left;"> - <tbody> - </tbody> - </table> - <div id="log"></div> - </body> -</html> 
diff --git a/media-source/index.html b/media-source/index.html index c3e9bcc..903afff 100644 --- a/media-source/index.html +++ b/media-source/index.html 
@@ -1,7 +1,7 @@  <!doctype html>  <html>  <head> - <link rel='stylesheet' href='../resources/testharness.css'> + <link rel='stylesheet' href='/resources/testharness.css'>  <script>  (function() {  var testURLs = []; 
diff --git a/media-source/mediasource-addsourcebuffer.html b/media-source/mediasource-addsourcebuffer.html index ce4ace5..cdcd42c 100644 --- a/media-source/mediasource-addsourcebuffer.html +++ b/media-source/mediasource-addsourcebuffer.html 
@@ -4,8 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> @@ -36,7 +34,7 @@  var sourceBuffer = mediaSource.addSourceBuffer(mimetype);  assert_true(sourceBuffer != null, "New SourceBuffer returned");  assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers"); - assert_equals(mediaSource.activeSourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.activeSourceBuffers"); + assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");  test.done();  }, "Test addSourceBuffer() with Vorbis and VP8");   @@ -51,9 +49,9 @@  var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype);  var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype);  assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.sourceBuffers"); - assert_equals(mediaSource.activeSourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.activeSourceBuffers"); + assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferA is not in mediaSource.activeSourceBuffers");  assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.sourceBuffers"); - assert_equals(mediaSource.activeSourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.activeSourceBuffers"); + assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferB is not in mediaSource.activeSourceBuffers");  test.done();  }, "Test addSourceBuffer() with Vorbis and VP8 in separate SourceBuffers");   @@ -66,7 +64,7 @@  var sourceBuffer = mediaSource.addSourceBuffer(mimetype);  assert_true(sourceBuffer != null, "New SourceBuffer returned");  assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers"); - assert_equals(mediaSource.activeSourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.activeSourceBuffers"); + assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");  test.done();  }, "Test addSourceBuffer() with AAC and H.264");   @@ -81,9 +79,9 @@  var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype);  var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype);  assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.sourceBuffers"); - assert_equals(mediaSource.activeSourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.activeSourceBuffers"); + assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferA is not in mediaSource.activeSourceBuffers");  assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.sourceBuffers"); - assert_equals(mediaSource.activeSourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.activeSourceBuffers"); + assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferB is not in mediaSource.activeSourceBuffers");  test.done();  }, "Test addSourceBuffer() with AAC and H.264 in separate SourceBuffers");  </script> 
diff --git a/media-source/mediasource-append-buffer.html b/media-source/mediasource-append-buffer.html index 68e8ae3..b4ae48a 100644 --- a/media-source/mediasource-append-buffer.html +++ b/media-source/mediasource-append-buffer.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> @@ -124,8 +123,8 @@  sourceBuffer.appendBuffer(mediaData);    assert_true(sourceBuffer.updating, "updating attribute is true"); + assert_equals(mediaSource.activeSourceBuffers.length, 0, "activeSourceBuffers.length");   - test.expectEvent(mediaSource.activeSourceBuffers, "removesourcebuffer", "activeSourceBuffers");  test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "sourceBuffers");  mediaSource.removeSourceBuffer(sourceBuffer);   
diff --git a/media-source/mediasource-append-stream.html b/media-source/mediasource-append-stream.html index fedf4a6..dc03cbb 100644 --- a/media-source/mediasource-append-stream.html +++ b/media-source/mediasource-append-stream.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> @@ -185,8 +184,8 @@  sourceBuffer.appendStream(xhr.response);    assert_true(sourceBuffer.updating, "updating attribute is true"); + assert_equals(mediaSource.activeSourceBuffers.length, 0, "activeSourceBuffers.length");   - test.expectEvent(mediaSource.activeSourceBuffers, "removesourcebuffer", "activeSourceBuffers");  test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "sourceBuffers");  mediaSource.removeSourceBuffer(sourceBuffer);   
diff --git a/media-source/mediasource-appendwindow.html b/media-source/mediasource-appendwindow.html index d591e59..3b03043 100644 --- a/media-source/mediasource-appendwindow.html +++ b/media-source/mediasource-appendwindow.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> @@ -32,15 +31,15 @@  assert_true(sourceBuffer != null, "New SourceBuffer returned");  sourceBuffer.appendWindowEnd = 500.0;   - assert_throws("TypeMismatchError", + assert_throws(new TypeError(),  function() { sourceBuffer.appendWindowStart = Number.NEGATIVE_INFINITY; },  "set appendWindowStart throws an exception for Number.NEGATIVE_INFINITY.");   - assert_throws("TypeMismatchError", + assert_throws(new TypeError(),  function() { sourceBuffer.appendWindowStart = Number.POSITIVE_INFINITY; },  "set appendWindowStart throws an exception for Number.POSITIVE_INFINITY.");   - assert_throws("TypeMismatchError", + assert_throws(new TypeError(),  function() { sourceBuffer.appendWindowStart = Number.NaN; },  "set appendWindowStart throws an exception for Number.NaN.");   
diff --git a/media-source/mediasource-buffered.html b/media-source/mediasource-buffered.html index a78a55c..a39bb16 100644 --- a/media-source/mediasource-buffered.html +++ b/media-source/mediasource-buffered.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> @@ -15,12 +14,12 @@  var manifestFilenameB = subType + "/test-v-128k-320x240-30fps-10kfr-manifest.json";    var expectationsA = { - webm: "{ [0.000, 2.023) }", + webm: "{ [0.000, 2.022) }",  mp4: "{ [0.000, 2.043) }",  };    var expectationsB = { - webm: "{ [0.000, 2.001) }", + webm: "{ [0.000, 2.000) }",  mp4: "{ [0.000, 2.000) }",  };   @@ -38,7 +37,7 @@  {  mediaSource.addSourceBuffer(typeA);  mediaSource.addSourceBuffer(typeB); - assert_equals(mediaSource.activeSourceBuffers.length, 2); + assert_equals(mediaSource.sourceBuffers.length, 2);    callback(test, mediaElement, mediaSource, dataA, dataB);  }); @@ -48,8 +47,8 @@    function appendData(test, mediaSource, dataA, dataB, callback)  { - var sourceBufferA = mediaSource.activeSourceBuffers[0]; - var sourceBufferB = mediaSource.activeSourceBuffers[1]; + var sourceBufferA = mediaSource.sourceBuffers[0]; + var sourceBufferB = mediaSource.sourceBuffers[1];    test.expectEvent(sourceBufferA, "update");  test.expectEvent(sourceBufferA, "updateend"); @@ -98,7 +97,7 @@  test.waitForExpectedEvents(function()  {  var expectationsAV = { - webm: ["{ [0.000, 2.004) }", "{ [0.000, 2.023) }"], + webm: ["{ [0.000, 2.003) }", "{ [0.000, 2.022) }"],  mp4: ["{ [0.000, 2.000) }", "{ [0.000, 2.043) }"],  };   @@ -118,9 +117,12 @@  });  }, "Muxed tracks with different lengths");   -  mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dataA, dataB) { - appendData(test, mediaSource, dataA, dataB.subarray(0, 318), function() + var dataBSize = { + webm: 318, + mp4: 820, + }; + appendData(test, mediaSource, dataA, dataB.subarray(0, dataBSize[subType]), function()  {  assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");  assertBufferedEquals(mediaSource.activeSourceBuffers[1], "{ }", "mediaSource.activeSourceBuffers[1]"); @@ -163,6 +165,7 @@  });  });  }, "Muxed content empty buffered ranges."); +  </script>  </body>  </html> 
diff --git a/media-source/mediasource-closed.html b/media-source/mediasource-closed.html index 29d319d..497239e 100644 --- a/media-source/mediasource-closed.html +++ b/media-source/mediasource-closed.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-mp4-a-bitrate.html b/media-source/mediasource-config-change-mp4-a-bitrate.html index 2d4210c..c034226 100644 --- a/media-source/mediasource-config-change-mp4-a-bitrate.html +++ b/media-source/mediasource-config-change-mp4-a-bitrate.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-mp4-av-audio-bitrate.html b/media-source/mediasource-config-change-mp4-av-audio-bitrate.html index 2dc9965..b51ff17 100644 --- a/media-source/mediasource-config-change-mp4-av-audio-bitrate.html +++ b/media-source/mediasource-config-change-mp4-av-audio-bitrate.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-mp4-av-framesize.html b/media-source/mediasource-config-change-mp4-av-framesize.html index e64f0cd..2d4f5af 100644 --- a/media-source/mediasource-config-change-mp4-av-framesize.html +++ b/media-source/mediasource-config-change-mp4-av-framesize.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-mp4-av-video-bitrate.html b/media-source/mediasource-config-change-mp4-av-video-bitrate.html index b971fe1..052af8f 100644 --- a/media-source/mediasource-config-change-mp4-av-video-bitrate.html +++ b/media-source/mediasource-config-change-mp4-av-video-bitrate.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-mp4-v-bitrate.html b/media-source/mediasource-config-change-mp4-v-bitrate.html index 4a12e1a..7b0852b 100644 --- a/media-source/mediasource-config-change-mp4-v-bitrate.html +++ b/media-source/mediasource-config-change-mp4-v-bitrate.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-mp4-v-framerate.html b/media-source/mediasource-config-change-mp4-v-framerate.html index b499e26..f4a6fe4 100644 --- a/media-source/mediasource-config-change-mp4-v-framerate.html +++ b/media-source/mediasource-config-change-mp4-v-framerate.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-mp4-v-framesize.html b/media-source/mediasource-config-change-mp4-v-framesize.html index fd61589..d4f58ff 100644 --- a/media-source/mediasource-config-change-mp4-v-framesize.html +++ b/media-source/mediasource-config-change-mp4-v-framesize.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-webm-a-bitrate.html b/media-source/mediasource-config-change-webm-a-bitrate.html index b4ac601..ef5fc39 100644 --- a/media-source/mediasource-config-change-webm-a-bitrate.html +++ b/media-source/mediasource-config-change-webm-a-bitrate.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-webm-av-audio-bitrate.html b/media-source/mediasource-config-change-webm-av-audio-bitrate.html index 8d2ac0c..c72b82b 100644 --- a/media-source/mediasource-config-change-webm-av-audio-bitrate.html +++ b/media-source/mediasource-config-change-webm-av-audio-bitrate.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-webm-av-framesize.html b/media-source/mediasource-config-change-webm-av-framesize.html index a086e5a..a0f178c 100644 --- a/media-source/mediasource-config-change-webm-av-framesize.html +++ b/media-source/mediasource-config-change-webm-av-framesize.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-webm-av-video-bitrate.html b/media-source/mediasource-config-change-webm-av-video-bitrate.html index c6be6f5..4e724ea 100644 --- a/media-source/mediasource-config-change-webm-av-video-bitrate.html +++ b/media-source/mediasource-config-change-webm-av-video-bitrate.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-webm-v-bitrate.html b/media-source/mediasource-config-change-webm-v-bitrate.html index 68621f1..d87eeb7 100644 --- a/media-source/mediasource-config-change-webm-v-bitrate.html +++ b/media-source/mediasource-config-change-webm-v-bitrate.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-webm-v-framerate.html b/media-source/mediasource-config-change-webm-v-framerate.html index 440ebe3..c3d066e 100644 --- a/media-source/mediasource-config-change-webm-v-framerate.html +++ b/media-source/mediasource-config-change-webm-v-framerate.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-change-webm-v-framesize.html b/media-source/mediasource-config-change-webm-v-framesize.html index 70b24c6..59bdefd 100644 --- a/media-source/mediasource-config-change-webm-v-framesize.html +++ b/media-source/mediasource-config-change-webm-v-framesize.html 
@@ -5,7 +5,6 @@  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script>  <script src="mediasource-config-changes.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-config-changes.js b/media-source/mediasource-config-changes.js index 6fc7278..586e25f 100644 --- a/media-source/mediasource-config-changes.js +++ b/media-source/mediasource-config-changes.js 
@@ -63,10 +63,26 @@    test.waitForExpectedEvents(function()  { + assert_false(sourceBuffer.updating, "updating"); + assert_greater_than(mediaSource.duration, 2, "duration"); +  // Truncate the presentation to a duration of 2 seconds.  mediaSource.duration = 2; + + assert_true(sourceBuffer.updating, "updating"); + test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'update', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer'); +	}); + +	test.waitForExpectedEvents(function() + { + assert_false(sourceBuffer.updating, "updating"); +  mediaSource.endOfStream();   + assert_false(sourceBuffer.updating, "updating"); +  if (expectResizeEvents) {  for (var i = 0; i < expectedResizeEventCount; ++i) {  test.expectEvent(mediaElement, "resize"); 
diff --git a/media-source/mediasource-duration.html b/media-source/mediasource-duration.html index 5b52a63..7b83c46 100644 --- a/media-source/mediasource-duration.html +++ b/media-source/mediasource-duration.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> @@ -46,7 +45,16 @@  assert_false(mediaElement.seeking, 'mediaElement.seeking after seeked to seekTo');    test.expectEvent(mediaElement, 'seeking', 'Seeking to truncated duration'); + + assert_false(sourceBuffer.updating, 'sourceBuffer.updating'); +  mediaSource.duration = truncatedDuration; + + assert_true(sourceBuffer.updating, 'sourceBuffer.updating'); + test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'update', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer'); +  assert_true(mediaElement.seeking, 'Seeking after setting truncatedDuration');  });   @@ -60,8 +68,6 @@  assert_equals(mediaSource.duration, truncatedDuration,  'mediaSource truncatedDuration during seek to it');   - // FIXME: Confirm 'waiting' and then 'stalled' fire here. See http://crbug.com/266592. -  testFunction(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData,  truncatedDuration);  }); @@ -83,8 +89,6 @@  // outstanding seek pending.  test.expectEvent(sourceBuffer, 'updateend', 'updateend after appending more data');   - // FIXME: Confirm 'playing' fires here. See http://crbug.com/266592. -  test.expectEvent(mediaElement, 'timeupdate', 'timeupdate while finishing seek to truncatedDuration');  test.expectEvent(mediaElement, 'seeked', 'seeked to truncatedDuration');   @@ -114,8 +118,6 @@  // outstanding seek pending.  test.expectEvent(mediaSource, 'sourceended', 'endOfStream acknowledged');   - // FIXME: Investigate if 'playing' should fire here. See http://crbug.com/266592. -  test.expectEvent(mediaElement, 'timeupdate', 'timeupdate while finishing seek to truncatedDuration');  test.expectEvent(mediaElement, 'seeked', 'seeked to truncatedDuration');   @@ -143,6 +145,15 @@  var fullDuration = segmentInfo.duration;  var newDuration = 0.5;   + var expectedDurationChangeEventCount = 1; + var durationchangeEventCounter = 0; + var durationchangeEventHandler = test.step_func(function(event) + { + assert_equals(mediaElement.duration, newDuration, 'mediaElement newDuration'); + assert_equals(mediaSource.duration, newDuration, 'mediaSource newDuration'); + durationchangeEventCounter++; + }); +  mediaElement.play();    // Append all the segments @@ -156,22 +167,24 @@  assert_equals(mediaSource.duration, fullDuration, 'mediaSource fullDuration');  assert_less_than(mediaElement.currentTime, newDuration / 2, 'mediaElement currentTime');   - var durationchangeEventCounter = 0; - var expectedDurationChangeEventCount = 1; - var durationchangeEventHandler = test.step_func(function(event) - { - assert_equals(mediaSource.readyState, 'ended', 'mediaSource ended'); - assert_equals(mediaElement.duration, newDuration, 'mediaElement newDuration'); - assert_equals(mediaSource.duration, newDuration, 'mediaSource newDuration'); - durationchangeEventCounter++; - }); -  // Media load also fires 'durationchange' event, so only start counting them now.  mediaElement.addEventListener('durationchange', durationchangeEventHandler);   + assert_false(sourceBuffer.updating, "updating"); +  // Truncate duration. This should result in one 'durationchange' fired.  mediaSource.duration = newDuration;   + assert_true(sourceBuffer.updating, "updating"); + test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'update', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer'); + }); + + test.waitForExpectedEvents(function() + { + assert_false(sourceBuffer.updating, "updating"); +  // Set duration again to make sure it does not trigger another 'durationchange' event.  mediaSource.duration = newDuration;   
diff --git a/media-source/mediasource-endofstream-invaliderror.html b/media-source/mediasource-endofstream-invaliderror.html index 881b113..066a0a9 100644 --- a/media-source/mediasource-endofstream-invaliderror.html +++ b/media-source/mediasource-endofstream-invaliderror.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-getvideoplaybackquality.html b/media-source/mediasource-getvideoplaybackquality.html index f089d63..0e2485e 100644 --- a/media-source/mediasource-getvideoplaybackquality.html +++ b/media-source/mediasource-getvideoplaybackquality.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> @@ -33,21 +32,38 @@  timeUpdateCount++;  }));   - mediaElement.addEventListener("ended", test.step_func(function(e) + test.failOnEvent(mediaElement, 'error'); + + test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'update', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer'); + sourceBuffer.appendBuffer(mediaData); + + test.waitForExpectedEvents(function() + { + assert_false(sourceBuffer.updating, "updating"); + assert_greater_than(mediaSource.duration, 1, "duration"); + + mediaSource.duration = 1; + + assert_true(sourceBuffer.updating, "updating"); + test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'update', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer'); + }); + + test.waitForExpectedEvents(function() + { + mediaSource.endOfStream(); + mediaElement.play(); + test.expectEvent(mediaElement, 'ended', 'mediaElement'); + }); + + test.waitForExpectedEvents(function()  {  assert_greater_than(timeUpdateCount, 2, "timeUpdateCount");  test.done(); - })); - - test.failOnEvent(mediaElement, 'error'); - - sourceBuffer.addEventListener('updateend', test.step_func(function() - { - mediaSource.duration = 1; - mediaSource.endOfStream(); - mediaElement.play(); - })); - sourceBuffer.appendBuffer(mediaData); + });  }, "Test HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API", {timeout: 5000});  </script>  </body> 
diff --git a/media-source/mediasource-is-type-supported.html b/media-source/mediasource-is-type-supported.html index 594fce0..d44082e 100644 --- a/media-source/mediasource-is-type-supported.html +++ b/media-source/mediasource-is-type-supported.html 
@@ -3,7 +3,6 @@  <head>  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-multiple-attach.html b/media-source/mediasource-multiple-attach.html index ed87dc4..ff129eb 100644 --- a/media-source/mediasource-multiple-attach.html +++ b/media-source/mediasource-multiple-attach.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-play-then-seek-back.html b/media-source/mediasource-play-then-seek-back.html index 6e3bdbb..eefd1b4 100644 --- a/media-source/mediasource-play-then-seek-back.html +++ b/media-source/mediasource-play-then-seek-back.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-play.html b/media-source/mediasource-play.html index b66540b..0f328c5 100644 --- a/media-source/mediasource-play.html +++ b/media-source/mediasource-play.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> @@ -14,14 +13,30 @@  test.failOnEvent(mediaElement, 'error');  test.endOnEvent(mediaElement, 'ended');   - sourceBuffer.addEventListener('updateend', test.step_func(function() - { - mediaSource.duration = 1; - mediaSource.endOfStream(); - mediaElement.play(); - })); + test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'update', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');    sourceBuffer.appendBuffer(mediaData); + + test.waitForExpectedEvents(function() + { + assert_false(sourceBuffer.updating, "updating"); + assert_greater_than(mediaSource.duration, 1, "duration"); + + mediaSource.duration = 1; + + assert_true(sourceBuffer.updating, "updating"); + test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'update', 'sourceBuffer'); + test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer'); + }); + + test.waitForExpectedEvents(function() + { + mediaSource.endOfStream(); + mediaElement.play(); + });  }, "Test normal playback case with MediaSource API", {timeout: 5000});  </script>  </body> 
diff --git a/media-source/mediasource-redundant-seek.html b/media-source/mediasource-redundant-seek.html index 4e1571e..c52fddb 100644 --- a/media-source/mediasource-redundant-seek.html +++ b/media-source/mediasource-redundant-seek.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> @@ -24,8 +23,6 @@  {  var bufferedRanges = mediaElement.buffered;   - // TODO: Add coverage by varying which of the two seek times have buffered data, including neither, and by - // varying seek redundancy, like 1+1, 1+3+3+1, 3+1+1, 3+3+1, or large number of 1+3+1+3+...  assert_greater_than_equal(mediaElement.duration, 4.0, 'Duration is >= 4.0s');  assert_equals(bufferedRanges.length, 1, 'Just one buffered range');  assert_less_than_equal(bufferedRanges.start(0), 1.0, 'Buffered range starts <= 1.0s'); 
diff --git a/media-source/mediasource-remove.html b/media-source/mediasource-remove.html index 8c8485a..0b5e42d 100644 --- a/media-source/mediasource-remove.html +++ b/media-source/mediasource-remove.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-seek-beyond-duration.html b/media-source/mediasource-seek-beyond-duration.html index 2342a67..c534846 100644 --- a/media-source/mediasource-seek-beyond-duration.html +++ b/media-source/mediasource-seek-beyond-duration.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel="stylesheet" href="/resources/testharness.css">  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-seek-during-pending-seek.html b/media-source/mediasource-seek-during-pending-seek.html index bb2490b..ed49313 100644 --- a/media-source/mediasource-seek-during-pending-seek.html +++ b/media-source/mediasource-seek-during-pending-seek.html 
@@ -4,7 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> 
diff --git a/media-source/mediasource-sourcebuffer-mode.html b/media-source/mediasource-sourcebuffer-mode.html index 1ae402f..a9517b8 100644 --- a/media-source/mediasource-sourcebuffer-mode.html +++ b/media-source/mediasource-sourcebuffer-mode.html 
@@ -4,8 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> @@ -136,8 +134,6 @@  test.done();  });  }, 'Test setting SourceBuffer.mode and SourceBuffer.timestampOffset while parsing media segment.'); - - // FIXME: Once 'sequence' mode implemented, add verification. See http://crbug.com/249422.  </script>  </body>  </html> 
diff --git a/media-source/mediasource-sourcebufferlist.html b/media-source/mediasource-sourcebufferlist.html index 4ed4f08..60e1e8b 100644 --- a/media-source/mediasource-sourcebufferlist.html +++ b/media-source/mediasource-sourcebufferlist.html 
@@ -4,8 +4,6 @@  <script src="/resources/testharness.js"></script>  <script src="/resources/testharnessreport.js"></script>  <script src="mediasource-util.js"></script> - - <link rel='stylesheet' href='/resources/testharness.css'>  </head>  <body>  <div id="log"></div> @@ -13,24 +11,20 @@  function verifySourceBufferLists(mediaSource, expected)  {  assert_equals(mediaSource.sourceBuffers.length, expected.length, "sourceBuffers length"); - assert_equals(mediaSource.activeSourceBuffers.length, expected.length, "activeSourceBuffers length"); - for (var i = 0; i < expected.length; ++i) { + assert_equals(mediaSource.activeSourceBuffers.length, 0, "activeSourceBuffers length"); + for (var i = 0; i < expected.length; ++i)  assert_equals(mediaSource.sourceBuffers[i], expected[i], "Verifying mediaSource.sourceBuffers[" + i + "]"); - assert_equals(mediaSource.activeSourceBuffers[i], expected[i], "Verifying mediaSource.activeSourceBuffers[" + i + "]"); - }  }    mediasource_test(function(test, mediaElement, mediaSource)  {  test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers"); - test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer", "activeSourceBuffers");  var sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE);  var sourceBufferB = null;    test.waitForExpectedEvents(function()  {  test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers"); - test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer", "activeSourceBuffers");  sourceBufferB = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);    verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBufferB]); @@ -38,14 +32,12 @@    test.waitForExpectedEvents(function()  { - test.expectEvent(mediaSource.activeSourceBuffers, "removesourcebuffer", "activeSourceBuffers");  test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "sourceBuffers");  mediaSource.removeSourceBuffer(sourceBufferA);    verifySourceBufferLists(mediaSource, [sourceBufferB]);    test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers"); - test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer", "activeSourceBuffers");  sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE);    verifySourceBufferLists(mediaSource, [sourceBufferB, sourceBufferA]); @@ -60,9 +52,7 @@  mediasource_test(function(test, mediaElement, mediaSource)  {  test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers"); - test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer", "activeSourceBuffers");  test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers"); - test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer", "activeSourceBuffers");  var sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE);  var sourceBufferB = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);   @@ -73,7 +63,6 @@  verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBufferB]);    // Force the media element to close the MediaSource object. - test.expectEvent(mediaSource.activeSourceBuffers, "removesourcebuffer", "activeSourceBuffers");  test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "sourceBuffers");  test.expectEvent(mediaSource, "sourceclose", "mediaSource closing");  mediaElement.src = ""; 
diff --git a/media-source/mediasource-util.js b/media-source/mediasource-util.js index 9ff218b..6f83dbc 100644 --- a/media-source/mediasource-util.js +++ b/media-source/mediasource-util.js 
@@ -1,11 +1,5 @@  (function(window) { - // Set the testharness.js timeout to 120 seconds so that it is higher than - // the LayoutTest timeout. This prevents testharness.js from prematurely - // terminating tests and allows the LayoutTest runner to control when to - // timeout the test. - // FIXME: Change this to use explicit_timeout instead once /resources/testharness.js - // is updated to a more recent version. - setup({ timeout: 120000 }); + setup({ timeout: 12000 });    var SEGMENT_INFO_LIST = [  { @@ -234,7 +228,7 @@    var audioOnlyTypes = ['audio/webm;codecs="vorbis"', 'audio/mp4;codecs="mp4a.40.2"'];  var videoOnlyTypes = ['video/webm;codecs="vp8"', 'video/mp4;codecs="avc1.4D4001"']; - var audioVideoTypes = ['video/webm;codecs="vp8,vorbis"', 'video/mp4;codecs="mp4a.40.2"']; + var audioVideoTypes = ['video/webm;codecs="vp8,vorbis"', 'video/mp4;codecs="avc1.4D4001,mp4a.40.2"'];  MediaSourceUtil.AUDIO_ONLY_TYPE = getFirstSupportedType(audioOnlyTypes);  MediaSourceUtil.VIDEO_ONLY_TYPE = getFirstSupportedType(videoOnlyTypes);  MediaSourceUtil.AUDIO_VIDEO_TYPE = getFirstSupportedType(audioVideoTypes); @@ -261,9 +255,6 @@  return mimetype.substr(start);  };   - // TODO: Add wrapper object to MediaSourceUtil that binds loaded mediaData to its - // associated segmentInfo. -  function addExtraTestMethods(test)  {  test.failOnEvent = function(object, eventName)